package simulator;

import java.util.Scanner;

import ecole.organisation.Ecole;
import ecole.organisation.Enseignement;
import ecole.organisation.Formation;
import ecole.utilisateur.Professeur;

/**
 * Classe mere des interfaces du projet, elle définie les methodes de login
 * @author Salah Bennour Hadrien Luttiau
 *
 */
public abstract class Interface {

	protected String motifLettres = "[a-zA-Z ]+";			// Motif pour respecter un mot composé de lettres
	protected String motifTypeSalle = "[0-5]";			// Motif pour respecter un entier désignant un type de salle
	protected String motifDate = "\\d{2}/\\d{2}/\\d{4}";	// Motif pour respecter la syntaxe d'une date
	protected String motifCreneaux = "[0-3]([,][0-3])+";  // Motif pour respecter la syntaxe d'une liste de créneaux
	protected Ecole ecole ;

	protected String bienvenue;
	protected Formation form;
	protected Professeur prof;
	protected Enseignement ens;
	protected String nom, prenom;
	protected int nbTentativesConnexion = 1;
	private Scanner sc ;

	public Interface(){}
	public Interface(Ecole ec)
	{
		this.ecole = ec;
	}

	public void affichage(){
		this.nom = saisieNom();
		this.prenom = saisiePrenom();
		verifProfRespo(nom, prenom);
		saisieId();
	}

	//GERER LES NOM ET PRENOMS COMPOSER (EX:JEAN-MARC ETC...)

	//IDENTIFICATION NOM
	private String saisieNom() {
		System.out.println(this.bienvenue);
		System.out.println("-- Nom : ");

		sc = new Scanner(System.in);
		String nom = sc.nextLine();

		if (!nom.matches(motifLettres)) {
			erreurSyntaxe(1);
			return saisieNom();
		}
		else
			return nom;
	}
	//IDENTIFICATION PRENOM
	private String saisiePrenom() {
		System.out.println("-- Prenom : ");
		sc = new Scanner(System.in);
		String prenom = sc.nextLine();

		if (!prenom.matches(motifLettres)) {
			erreurSyntaxe(1);
			return saisiePrenom();
		}
		else{
			return prenom;
		}
	}

	protected abstract void verifProfRespo(String nom, String prenom);

	//IDENTIFICATION id
	protected void saisieId(){
		//System.out.println("\n********** 0 - Quitter ***********");
		System.out.println("\n************************************************");
		System.out.println("************** ID : Tentative ("+nbTentativesConnexion+"/3) ************");
		System.out.println("************************************************");
		System.out.println("-- Identifiant Professeur : ");

		sc = new Scanner(System.in);
		String id = sc.nextLine();
		if(id.equals("0"))
			affichage();
		else if(this.prof.getIdentifiant().equals(id))
			menu();
		else{
			nbTentativesConnexion++;
			if(nbTentativesConnexion > 3){
				System.out.println("Vous avez dépassé le seuil de tentatives de connexion!");
				nbTentativesConnexion = 0;
				affichage();
			}
			else {
				System.out.println("Identifiant erroné");
				saisieId();
			}
		}
	}

	public void erreurSyntaxe(int a){
		switch(a){
		case 1:
			System.err.println("Mauvaise syntaxe ! Veuillez saisir uniquement des lettres.");
			break;
		case 2:
			System.err.println("Mauvaise syntaxe ! Veuillez saisir uniquement des chiffres.");
			break;
		case 3:
			System.err.println("Mauvaise syntaxe ! Veuillez saisir un chiffre dans le champs demandé.");
			break;
		case 4:
			System.err.println("Mauvaise syntaxe ! Le nom de l'enseignement doit au moins contenir des lettres");
			break;
		case 5:
			System.err.println("Mauvaise syntaxe ! Un coefficient doit etre compris entre 0(non inclus) et 6(inclus)");
			break;
		}
	}
	protected abstract void menu();
}
